// /utils/mapService.js

// 引入request工具，如果需要统一管理请求的话
// import request from '@/request/index.js'; 

const BAIDU_MAP_AK = 'pPqbixA6zhMXhf9ifPyBulYXPwA7QSTt'; // 强烈建议将Key放在配置文件中

// ** 核心修改：定义一个基础URL，根据平台不同而不同 **
// #ifdef H5
// H5开发环境，请求本地代理路径
const BASE_URL = '/api/map'; 
// #endif

// #ifndef H5
// App、小程序等环境，直接请求百度服务器
const BASE_URL = 'https://api.map.baidu.com';
// #endif

/**
 * 搜索地点（区域检索 - Web服务API）
 * @param {object} options - 搜索选项
 * @param {string} options.keyword - 搜索关键词
 * @param {string} options.city - 搜索的城市名称
 * @param {number} [options.pageNum=0] - 分页页码
 * @returns {Promise<Array>} - 返回地点信息数组
 */
export function searchPlaces({ keyword, city, pageNum = 0 }) {
    return new Promise((resolve, reject) => {
        uni.request({
            url: `${BASE_URL}/place/v2/search`,
            method: 'GET',
            data: {
                query: keyword,
                region: city,
                output: 'json',
                ak: BAIDU_MAP_AK,
                page_size: 20,
                page_num: pageNum,
                ret_coordtype: 'gcj02ll' // 返回国测局坐标
            },
            success: (res) => {
                if (res.data && res.data.status === 0) {
                    const formattedResults = (res.data.results || []).map(item => ({
                        name: item.name,
                        address: item.address,
                        latitude: item.location ? item.location.lat : null,
                        longitude: item.location ? item.location.lng : null,
                        uid: item.uid,
                        city: item.city,
                        province: item.province,
                        area: item.area
                    }));
                    resolve(formattedResults);
                } else {
                    reject(res.data.message || '地点搜索失败');
                }
            },
            fail: (err) => {
                reject('网络请求失败');
            }
        });
    });
}

/**
 * 获取附近的地点（周边检索 - Web服务API）
 * @param {object} options - 搜索选项
 * @param {number} options.latitude - 纬度 (GCJ-02)
 * @param {number} options.longitude - 经度 (GCJ-02)
 * @param {string} [options.keyword='美食|景点|酒店'] - 关键词，用'|'分隔表示“或”
 * @param {number} [options.radius=2000] - 检索半径，单位米
 * @param {number} [options.pageNum=0] - 分页页码
 * @returns {Promise<Array>} - 返回地点信息数组
 */
export function getNearbyPlaces({ latitude, longitude, keyword = '美食|景点|酒店', radius = 2000, pageNum = 0 }) {
     return new Promise((resolve, reject) => {
        uni.request({
            url: `${BASE_URL}/place/v2/search`,
            method: 'GET',
            data: {
                query: keyword,
                location: `${latitude},${longitude}`,
                radius: radius,
                output: 'json',
                ak: BAIDU_MAP_AK,
                page_size: 20,
                page_num: pageNum,
                coord_type: 3, // 3代表GCJ-02坐标
                ret_coordtype: 'gcj02ll' // 返回国测局坐标
            },
            success: (res) => {
                if (res.data && res.data.status === 0) {
                    const formattedResults = (res.data.results || []).map(item => ({
                        name: item.name,
                        address: item.address,
                        latitude: item.location ? item.location.lat : null,
                        longitude: item.location ? item.location.lng : null,
                        uid: item.uid,
                        city: item.city,
                        province: item.province,
                        area: item.area
                    }));
                    resolve(formattedResults);
                } else {
                    reject(res.data.message || '周边搜索失败');
                }
            },
            fail: (err) => {
                reject('网络请求失败');
            }
        });
    });
}

/**
 * 获取单个地点的详细信息 (地点详情服务 API v3)
 * @param {string} uid - 地点的唯一标识符 (POI UID)
 * @returns {Promise<object>} - 返回地点的详细信息对象
 */
export function getPlaceDetail(uid) {
    if (!uid) {
        return Promise.reject('获取地点详情必须提供 uid');
    }
    return new Promise((resolve, reject) => {
        uni.request({
            url: `${BASE_URL}/place/v3/detail`, // 注意：API版本为 v3/detail
            method: 'GET',
            data: {
                uid: uid,
                output: 'json',
                scope: '2', // 关键：scope=2 表示获取详细信息（高级付费），基础信息是 scope=1
                ak: BAIDU_MAP_AK,
                ret_coordtype: 'gcj02ll'
            },
            success: (res) => {
                if (res.data && res.data.status === 0) {
                    // 成功获取数据，进行格式化处理
                    const formattedDetail = res.data.results[0]
                    resolve(formattedDetail);
                } else {
                    reject(res.data.message || `地点详情获取失败 (uid: ${uid})`);
                }
            },
            fail: (err) => {
                reject('网络请求失败');
            }
        });
    });
}